<!-- 高德地图 -->

<template>
  <div class="GaodeMap" :id="id" />
</template>

<script>
// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'

const { AMap } = window

let CONFIG

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'GaodeMap',

  /**
   * 状态数据
   */
  data() {
    return {
      map: null,
      id: `GaodeMap-${CORE.fileName().replace(/\./g, '_')}`,
    }
  },

  /**
   * 挂载完成 (先抽取再调用)
   */
  mounted() {
    this.initGaodeMap()
  },

  /**
   * 销毁之前 (先抽取再调用)
   */
  beforeDestroy() {
    this.distroyGaodeMap()
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 加载高德地图
     */
    async loadGaodeMap() {
      if (!CONFIG) {
        CONFIG = await CORE.loadJSON(CORE.asset('AMAP_CONFIG.json'))
        CONFIG.showLabel = false
      }
    },

    /**
     * 初始化高德地图
     */
    async initGaodeMap() {
      await this.loadGaodeMap()

      // 初始化
      AMap.plugin('AMap.MoveAnimation', () => {
        this.map = new AMap.Map(this.id, CONFIG.MAP)
        this.$emit('inited')
      })
    },

    /**
     * 销毁高德地图
     */
    distroyGaodeMap() {
      if (this.map) {
        this.map.destroy()
        this.map = null
      }
    },
  },
}
</script>

<style lang="scss">
@import './index.scss';
</style>
